4.10. Взаимодействие программ с БД
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Взаимодействие программ с БД
Общий алгоритм
★ Алгоритм взаимодействия любой программы с БД всегда такой:
- Подключение к СУБД:
- программа устанавливает соединение с сервером СУБД;
- указываются параметры подключения: адрес сервера, порт, имя пользователя, пароль;
- если подключение успешно, программа получает доступ к управлению базой данных.
- Соединение с конкретной БД:
- после подключения к СУБД программа выбирает конкретную базу данных для работы;
- для этого используется указание имени базы данных или выбор из списка доступных.
- Авторизация и аутентификация:
- проверяются права доступа пользователя к выбранной базе данных;
- определяется уровень привилегий - чтение, запись, изменение структуры.
- Старт транзакции:
- если операции требуют целосности данных (например, обновление нескольких таблиц), программа начинает транзакцию;
- транзакция гарантирует, что все изменения будут применены только в случае успешного завершения всех шагов.
- Выполнение запроса:
- программа формирует и отправляет запрос к БД;
- запрос может быть простым (выборка SELECT) или сложным (вычисления, объединения таблиц, агрегатные функции);
- нужно правильно составить SQL-запрос, учитывая логику программы и структуру базы данных;
- запрос может возвращать огромное количество строк, которые нужно обработать;
- часть данных может потребоваться для дальнейших расчётов в программе, что усложняет интеграцию;
- необходимо обрабатывать ошибки, такие как синтаксические ошибки в запросе, отсутствие данных или нарушение целостности.
- Чтение результата:
- программа получает ответ от базы данных;
- результат может быть представлен в виде набора строк, значений или сообщения об ошибке;
- данные преобразуются в формат, понятный программе (объекты или массивы).
- Завершение транзакции:
- если запрос выполнен успешно, транзакция фиксируется (COMMIT);
- в случае ошибки транзакция откатывается (ROLLBACK), чтобы сохранить целостность данных.
- Закрытие соединения с БД:
- после завершения работы программа закрывает соединение с базой данных;
- это освобождает ресурсы сервера и предотвращает утечки памяти.
Схематично:

Особенности взаимодействия
Самое важное - сложность выполнения запроса. Формирование запроса требует глубокого понимания структуры базы данных и логики программы. Сложные запросы могут включать объединения, подзапросы, временные таблицы, вычисления внутри запроса, а программе может потребоваться выполнять дополнительные действия с данными после получения результата.
Большие объёмы данных могут перегружать как базу данных, так и программу. Необходимо оптимизировать запросы, чтобы минимизировать время выполнения и использование ресурсов. Программа также должна следить за состоянием соединения, транзакций и обработкой ошибок. Неправильное управление состоянием может привести к утечкам данных или блокировкам.
И интеграция с приложением. Данные из базы должны быть преобразованы в формат, удобный для работы в программе. Например, строки таблицы представляют собой набор данных, который можно преобразовать в массивы (списки, словари) или объекты.
Подходы
★ Какие же подходы используются в приложениях?
Прямые запросы
Программа напрямую формирует и отправляет SQL-запросы к базе данных. Здесь имеется полный контроль над запросами, возможность оптимизации, но недостатки данного подхода – это высокая сложность формирования запросов и необходимость ручной обработки данных. Буквально в коде это создание, к примеру, переменной типа String со значением запроса - «SELECT * FROM table» и отправка этого значения в базу.

Использование посредников
Программа при этом использует библиотеки или фреймворки для взаимодействия с базой данных. Эти инструменты предоставляют готовые методы для выполнения стандартных операций (CRUD).

Интеграции через API
Вместо прямого взаимодействия с базой данных, программа может использовать API-сервисы. API предоставляет готовые методы для работы с данными, скрывая детали реализации. Это своего рода многоступенчатость, когда программа саму логику работы с БД не содержит, а вызывает некий сторонний сервис, который уже сам выполняет работу с БД - такой особый вид посредника. Это более безопасное взаимодействие, упрощающее архитектуру приложения, однако порождает зависимость от стороннего сервиса и возможные задержки при работе через сеть.

ORM (Object-Relational Mapping) - объектно-реляционная модель.
Она автоматически преобразует объекты программы в записи БД и наоборот. Это упрощает работу с базой данных, автоматически генерирует запросы и уменьшает количество ошибок. Потенциально, тут есть потеря производительности, а гибкость для сложных запросов ограничена, но это считается наиболее изящным решением.

Взаимодействие СУБД с программами и приложениями
★ Как СУБД взаимодействует с программами и приложениями?
- Приём запросов. СУБД принимает запросы от программ через сетевое соединение или локальный интерфейс. Запросы могут быть отправлены в виде текстовых команд (SQL) или через специализированные протоколы.
- Обработка запросов. СУБД анализирует запрос, проверяет синтаксис и права доступа. Запрос выполняется на основе внутренних алгоритмов СУБД (например, использование индексов, оптимизация планов выполнения).
- Возврат результатов. СУБД формирует ответ на запрос и отправляет его программе. Результат может быть представлен в виде таблицы, скалярного значения или сообщения об ошибке.
- Управление ресурсами. СУБД следит за использованием памяти, процессора и дискового пространства. Она также управляет параллельными запросами, чтобы избежать конфликтов.
- Логирование и мониторинг. СУБД записывает информацию о выполнении запросов, чтобы можно было анализировать производительность и выявлять проблемы.